#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>

int main(int argc, char const *argv[])
{
    printf("main进程(%d)开始执行 \n", getpid());

    // 创建一个子进程
    /*
    fork内部
    1. 创建子进程，拷贝父进程的内存空间作为子进程的内存空间(代码，数据，堆，栈)
    2. 选择执行父进程， 返回子进程的pid
    3. 选择执行子进程， 返回0

    程序计数器：pc (program counter) 存储当前执行的位置
    pc = 19
    */
    int value = 100;
    pid_t pid = fork();
    printf("fork之后 \n");
    if (pid == 0) { // 子进程
        value--;
        printf("子进程(%d)开始执行,父进程id:%d, value=%d, value的地址:%p \n", getpid(), getppid()
            , value, &value);
    } else if (pid > 0){ // 父进程
        value++;
        printf("主进程(%d)又开始执行,子进程id:%d, value=%d, value的地址:%p \n", getpid(), pid
            ,value, &value);
    } else { // 创建失败
        printf("创建子进程失败\n");
        return -1;
    }

    printf("进程(%d)执行结束 \n", getpid());

    return 0;
}
